function WebGLExtensions(gl) {

  const extensions = {};

  return {

    has: function (name) {

      if (extensions[name] !== undefined) {

        return extensions[name] !== null;

      }

      let extension;

      switch (name) {

        case 'WEBGL_depth_texture':
          extension = gl.getExtension('WEBGL_depth_texture') || gl.getExtension('MOZ_WEBGL_depth_texture') || gl.getExtension('WEBKIT_WEBGL_depth_texture');
          break;

        case 'EXT_texture_filter_anisotropic':
          extension = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('MOZ_EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
          break;

        case 'WEBGL_compressed_texture_s3tc':
          extension = gl.getExtension('WEBGL_compressed_texture_s3tc') || gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');
          break;

        case 'WEBGL_compressed_texture_pvrtc':
          extension = gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc');
          break;

        default:
          extension = gl.getExtension(name);

      }

      extensions[name] = extension;

      return extension !== null;

    },

    get: function (name) {

      if (!this.has(name)) {

        console.warn('THREE.WebGLRenderer: ' + name + ' extension not supported.');

      }

      return extensions[name];

    }

  };

}


export {WebGLExtensions};
